/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.trandio.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.trandio.util.ConexionDb;
import org.trandio.model.AdmisionVO;
import org.trandio.model.DetalleAdmisionVO;

/**
 *
 * @author root
 */
public class AdmisionDAO implements AdmisionInterface {

    @Override
    public int guardarAdmision(String id_paciente, String id_estado, 
            String id_usuario, String id_tipo_admision, String id_entidad,
            String id_contrato, String id_via_ingreso, String numero_autorizacion,
            String id_medico, String id_causa_externa, String id_diagnostico,
            String fecha_ingreso) throws SQLException, NamingException {
        
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdiciona = "INSERT INTO tb_admision(id_paciente, id_estado, "
                + "id_usuario, id_tipo_admision, id_entidad, id_contrato, "
                + "id_via_ingreso, numero_autorizacion, id_medico, "
                + "id_causa_externa, id_diagnostico, fecha_ingreso)"
                + "VALUES (?,?,?,?,?,?,?,?,?,?,?,'"+fecha_ingreso+"') RETURNING id;";

        PreparedStatement stmt = conn.prepareStatement(sqlAdiciona);
        stmt.setInt(1, Integer.parseInt(id_paciente));
        stmt.setInt(2, Integer.parseInt(id_estado));
        stmt.setInt(3, Integer.parseInt(id_usuario));
        stmt.setInt(4, Integer.parseInt(id_tipo_admision));
        stmt.setInt(5, Integer.parseInt(id_entidad));
        stmt.setInt(6, Integer.parseInt(id_contrato));
        
        stmt.setInt(7, Integer.parseInt(id_via_ingreso));
        stmt.setString(8, numero_autorizacion);
        stmt.setInt(9, Integer.parseInt(id_medico));
        stmt.setInt(10, Integer.parseInt(id_causa_externa));
        stmt.setInt(11, Integer.parseInt(id_diagnostico));



        ResultSet rs = stmt.executeQuery();

        rs.next();

        int resp = rs.getInt(1);

        System.out.println("Insert Generar: " + resp);

        stmt.close();
        if (!conn.isClosed()) {
            conn.close();
        }

        return resp;
    }

    @Override
    public AdmisionVO buscarEstadoAdmisionPaciente(String idPaciente, String estado) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String desEst = "";

        if (!estado.equals("")) {
            desEst = " and tb_estado_admision.descripcion='" + estado + "'";

        }

        String sql = "SELECT tb_admision.id, "
                + "fecha, "
                + "id_paciente, "
                + "tb_estado_admision.descripcion desest, "
                + "id_estado, "
                + "id_usuario, "
                + "id_via_ingreso, "
                + "numero_autorizacion, "
                + "id_medico, "
                + "observacion, "
                + "id_prioridad, "
                + "motivo_consulta, "
                + "id_ips_remite, "
                + "id_unidad_funcional, "
                + "id_tipo_admision, "
                + "id_causa_externa, "
                + "id_diagnostico, "
                + "id_cama, "
                + "fecha_ingreso, "
                + "fecha_egreso, "
                + "id_diagnostico_egreso, "
                + "id_diagnostico_egreso_r1, "
                + "id_diagnostico_egreso_r2, "
                + "id_diagnostico_egreso_r3, "
                + "id_diagnostico_complicacion, "
                + "id_estado_ingreso, "
                + "id_estado_egreso, "
                + "id_destino_egreso, "
                + "id_diagnostico_muerte, "
                + "id_tipo_urgencia, "
                + "id_usuario_egreso,"
                + "id_motivo_egreso, "
                + "id_entidad, "
                + "id_contrato, "
                + "id_acompanante from tb_admision, tb_estado_admision "
                + "where tb_admision.id_estado = tb_estado_admision.id "
                + " and tb_admision.id_paciente='" + idPaciente + "'" + desEst;



        PreparedStatement stm = conn.prepareStatement(sql);
        ResultSet res = stm.executeQuery();

        AdmisionVO admisionVO = new AdmisionVO();

        if (res.next()) {

            admisionVO.setId(res.getInt("id"));
            admisionVO.setFecha(res.getString("fecha"));
            admisionVO.setId_paciente(res.getInt("id_paciente"));
            admisionVO.setId_estado(res.getInt("id_estado"));
            admisionVO.setDescripcionEstado(res.getString("desest"));
            admisionVO.setId_usuario(res.getInt("id_usuario"));
            admisionVO.setId_via_ingreso(res.getInt("id_via_ingreso"));
            admisionVO.setNumero_autorizacion(res.getString("numero_autorizacion"));
            admisionVO.setId_medico(res.getInt("id_medico"));
            admisionVO.setObservacion(res.getString("observacion"));
            admisionVO.setId_prioridad(res.getInt("id_prioridad"));
            admisionVO.setMotivo_consulta(res.getString("motivo_consulta"));
            admisionVO.setId_ips_remite(res.getInt("id_ips_remite"));
            admisionVO.setId_unidad_funcional(res.getInt("id_unidad_funcional"));
            admisionVO.setId_tipo_admision(res.getInt("id_tipo_admision"));
            admisionVO.setId_causa_externa(res.getInt("id_causa_externa"));
            admisionVO.setId_diagnostico(res.getInt("id_diagnostico"));
            admisionVO.setId_cama(res.getInt("id_cama"));
            admisionVO.setFecha_ingreso(res.getString("fecha_ingreso"));
            admisionVO.setFecha_egreso(res.getString("fecha_egreso"));
            admisionVO.setId_diagnostico_egreso(res.getInt("id_diagnostico_egreso"));
            admisionVO.setId_diagnostico_egreso_r1(res.getInt("id_diagnostico_egreso_r1"));
            admisionVO.setId_diagnostico_egreso_r2(res.getInt("id_diagnostico_egreso_r2"));
            admisionVO.setId_diagnostico_egreso_r3(res.getInt("id_diagnostico_egreso_r3"));
            admisionVO.setId_diagnostico_complicacion(res.getInt("id_diagnostico_complicacion"));
            admisionVO.setId_estado_ingreso(res.getInt("id_estado_ingreso"));
            admisionVO.setId_estado_egreso(res.getInt("id_estado_egreso"));
            admisionVO.setId_destino_egreso(res.getInt("id_destino_egreso"));
            admisionVO.setId_diagnostico_muerte(res.getInt("id_diagnostico_muerte"));
            admisionVO.setId_tipo_urgencia(res.getInt("id_tipo_urgencia"));
            admisionVO.setId_usuario_egreso(res.getInt("id_usuario_egreso"));
            admisionVO.setId_motivo_egreso(res.getInt("id_motivo_egreso"));
            admisionVO.setId_entidad(res.getInt("id_entidad"));
            admisionVO.setId_contrato(res.getInt("id_contrato"));
            admisionVO.setId_acompanante(res.getInt("id_acompanante"));
        }

        res.close();
        stm.close();
        if (!conn.isClosed()) {
            conn.close();
        }

        return admisionVO;
    }

    @Override
    public int guardarDetalleAdmision(String idAdmision, String idActividad, String valorUnitario, String valorSubsidio, String valorCopago, String cantidad, String valorTotal, String idMedico) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdiciona = "INSERT INTO tb_detalle_admision(id_admision, id_actividad, valor_unitario, valor_subsidio,"
                + "valor_copago, cantidad, valor_total, id_detallepadre, id_medico,id_especialidad) "
                + "VALUES (?,?,?,?,?,?,?,?,?,?) RETURNING id;";

        PreparedStatement stmt = conn.prepareStatement(sqlAdiciona);
        stmt.setInt(1, Integer.parseInt(idAdmision));
        stmt.setInt(2, Integer.parseInt(idActividad));
        stmt.setFloat(3, Float.parseFloat(valorUnitario));
        stmt.setFloat(4, Float.parseFloat(valorSubsidio));
        stmt.setFloat(5, Float.parseFloat(valorCopago));
        stmt.setInt(6, Integer.parseInt(cantidad));
        stmt.setFloat(7, Float.parseFloat(valorTotal));
        stmt.setInt(8, 0);
        stmt.setInt(9, Integer.parseInt(idMedico));
        stmt.setInt(10, 0);


        ResultSet rs = stmt.executeQuery();

        rs.next();

        int resp = rs.getInt(1);

        System.out.println("Insert Generar: " + resp);

        stmt.close();
        if (!conn.isClosed()) {
            conn.close();
        }

        return resp;
    }

    @Override
    public List<DetalleAdmisionVO> buscarActividadesCargadasAdmisionId(int idAdmision) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        List<DetalleAdmisionVO> lisdetalleAdmisionVO = new ArrayList<DetalleAdmisionVO>();


        String sql = "SELECT tb_detalle_admision.id, "
                + "tb_detalle_admision.id_admision, "
                + "tb_detalle_admision.id_actividad, "
                + "tb_detalle_admision.valor_unitario, "
                + "tb_detalle_admision.valor_subsidio, "
                + "tb_detalle_admision.valor_copago, "
                + "tb_detalle_admision.cantidad, "
                + "tb_detalle_admision.valor_total, "
                + "tb_detalle_admision.id_detallepadre, "
                + "tb_detalle_admision.id_medico, "
                + "tb_detalle_admision.id_especialidad, "
                + "tb_actividad.codigo, "
                + "tb_actividad.descripcion, "
                + "tb_actividad.id_tipo_registro "
                + "from tb_detalle_admision, tb_actividad "
                + "where tb_detalle_admision.id_actividad = tb_actividad.id "
                + " and tb_detalle_admision.id_admision='" + idAdmision + "'";

        PreparedStatement stm = conn.prepareStatement(sql);
        ResultSet res = stm.executeQuery();

        while (res.next()) {

            DetalleAdmisionVO detalleAdmisionVO = new DetalleAdmisionVO();

            detalleAdmisionVO.setId(res.getInt("id"));
            detalleAdmisionVO.setId_admision(res.getInt("id_admision"));
            detalleAdmisionVO.setIdactividad(res.getInt("id_actividad"));
            detalleAdmisionVO.setVrunitario(res.getFloat("valor_unitario"));
            detalleAdmisionVO.setVraseguradora(res.getFloat("valor_subsidio"));
            detalleAdmisionVO.setVrpaciente(res.getFloat("valor_copago"));
            detalleAdmisionVO.setCantidad(res.getInt("cantidad"));
            detalleAdmisionVO.setVrtotal(res.getFloat("valor_total"));
            detalleAdmisionVO.setId_detallepadre(res.getInt("id_detallepadre"));
            detalleAdmisionVO.setId_medico(res.getInt("id_medico"));
            detalleAdmisionVO.setId_especialidad(res.getInt("id_especialidad"));
            detalleAdmisionVO.setCodigo(res.getString("codigo"));
            detalleAdmisionVO.setDescripcion(res.getString("descripcion"));
            detalleAdmisionVO.setTipoRegistro(res.getInt("id_tipo_registro"));

            lisdetalleAdmisionVO.add(detalleAdmisionVO);

        }

        res.close();
        stm.close();
        if (!conn.isClosed()) {
            conn.close();
        }

        return lisdetalleAdmisionVO;
    }
    
    @Override
    public AdmisionVO buscarAdmsionId(int idAdmision) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        
        String sql = "SELECT tb_admision.id, "
                + "fecha, "
                + "id_paciente, "
                + "tb_estado_admision.descripcion desest, "
                + "id_estado, "
                + "id_usuario, "
                + "id_via_ingreso, "
                + "numero_autorizacion, "
                + "id_medico, "
                + "observacion, "
                + "id_prioridad, "
                + "motivo_consulta, "
                + "id_ips_remite, "
                + "id_unidad_funcional, "
                + "id_tipo_admision, "
                + "id_causa_externa, "
                + "id_diagnostico, "
                + "id_cama, "
                + "fecha_ingreso, "
                + "fecha_egreso, "
                + "id_diagnostico_egreso, "
                + "id_diagnostico_egreso_r1, "
                + "id_diagnostico_egreso_r2, "
                + "id_diagnostico_egreso_r3, "
                + "id_diagnostico_complicacion, "
                + "id_estado_ingreso, "
                + "id_estado_egreso, "
                + "id_destino_egreso, "
                + "id_diagnostico_muerte, "
                + "id_tipo_urgencia, "
                + "id_usuario_egreso,"
                + "id_motivo_egreso, "
                + "id_entidad, "
                + "id_contrato, "
                + "id_acompanante from tb_admision, tb_estado_admision "
                + "where tb_admision.id_estado = tb_estado_admision.id "
                + " and tb_admision.id=" + idAdmision;
        
        PreparedStatement stm = conn.prepareStatement(sql);
        ResultSet res = stm.executeQuery();

        AdmisionVO admisionVO = new AdmisionVO();

        if (res.next()) {

            admisionVO.setId(res.getInt("id"));
            admisionVO.setFecha(res.getString("fecha"));
            admisionVO.setId_paciente(res.getInt("id_paciente"));
            admisionVO.setId_estado(res.getInt("id_estado"));
            admisionVO.setDescripcionEstado(res.getString("desest"));
            admisionVO.setId_usuario(res.getInt("id_usuario"));
            admisionVO.setId_via_ingreso(res.getInt("id_via_ingreso"));
            admisionVO.setNumero_autorizacion(res.getString("numero_autorizacion"));
            admisionVO.setId_medico(res.getInt("id_medico"));
            admisionVO.setObservacion(res.getString("observacion"));
            admisionVO.setId_prioridad(res.getInt("id_prioridad"));
            admisionVO.setMotivo_consulta(res.getString("motivo_consulta"));
            admisionVO.setId_ips_remite(res.getInt("id_ips_remite"));
            admisionVO.setId_unidad_funcional(res.getInt("id_unidad_funcional"));
            admisionVO.setId_tipo_admision(res.getInt("id_tipo_admision"));
            admisionVO.setId_causa_externa(res.getInt("id_causa_externa"));
            admisionVO.setId_diagnostico(res.getInt("id_diagnostico"));
            admisionVO.setId_cama(res.getInt("id_cama"));
            admisionVO.setFecha_ingreso(res.getString("fecha_ingreso"));
            admisionVO.setFecha_egreso(res.getString("fecha_egreso"));
            admisionVO.setId_diagnostico_egreso(res.getInt("id_diagnostico_egreso"));
            admisionVO.setId_diagnostico_egreso_r1(res.getInt("id_diagnostico_egreso_r1"));
            admisionVO.setId_diagnostico_egreso_r2(res.getInt("id_diagnostico_egreso_r2"));
            admisionVO.setId_diagnostico_egreso_r3(res.getInt("id_diagnostico_egreso_r3"));
            admisionVO.setId_diagnostico_complicacion(res.getInt("id_diagnostico_complicacion"));
            admisionVO.setId_estado_ingreso(res.getInt("id_estado_ingreso"));
            admisionVO.setId_estado_egreso(res.getInt("id_estado_egreso"));
            admisionVO.setId_destino_egreso(res.getInt("id_destino_egreso"));
            admisionVO.setId_diagnostico_muerte(res.getInt("id_diagnostico_muerte"));
            admisionVO.setId_tipo_urgencia(res.getInt("id_tipo_urgencia"));
            admisionVO.setId_usuario_egreso(res.getInt("id_usuario_egreso"));
            admisionVO.setId_motivo_egreso(res.getInt("id_motivo_egreso"));
            admisionVO.setId_entidad(res.getInt("id_entidad"));
            admisionVO.setId_contrato(res.getInt("id_contrato"));
            admisionVO.setId_acompanante(res.getInt("id_acompanante"));
        }

        res.close();
        stm.close();
        if (!conn.isClosed()) {
            conn.close();
        }

        return admisionVO;
    }
    
    
    @Override
    public void actualizarEstadoAdmision(int idAdmision, String estado) throws SQLException, NamingException {

        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();


        String sqlAdiciona = "UPDATE tb_admision"
                + " SET  id_estado='" + estado + "' WHERE id=" + idAdmision;
        System.out.println("actualizar estado de admision: " + sqlAdiciona);

        Statement stmt = conn.createStatement();
        stmt.executeUpdate(sqlAdiciona);

        stmt.close();
        if (!conn.isClosed()) {
            conn.close();
        }
    }
    
    
    public void eliminarDetalleAdmision(int idadmision, int idActividad) throws SQLException, NamingException {

        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();


        String sqlAdiciona = "DELETE from tb_detalle_admision"
                + " WHERE id_admision = "+ idadmision+" and id_actividad=" + idActividad;
        System.out.println("eliminar el detalle de admision: " + sqlAdiciona);

        Statement stmt = conn.createStatement();
        stmt.executeUpdate(sqlAdiciona);

        stmt.close();
        if (!conn.isClosed()) {
            conn.close();
        }
    }
    
    

    
}
